러스트에서 배열은 T
형 오브젝트가 길이 length
만큼 메모리에 연속적으로 저장되는 형태이다. 다음처럼 선언할 수 있다.
// Fixed-size array (type signature is superfluous)
let xs: [i32; 5] = [1, 2, 3, 4, 5];
// All elements can be initialized to the same value
let ys: [i32; 500] = [0; 500];
길이는 이렇게
let xs: [i32;5] = [4,5,6,7,8];
xs.len()
Slices는 전체 길이는 알지 못하지만 배열의 중간 지점부터 토막 길이 정보를 가진 오브젝트이다. 첫번째 메모리블럭은 데이터를 가리키고, 두번째는 길이 정보를 가진다.
// String은 Vec<u8>
fn main() {
let ys= &xs[2..4]; // 2 <= idx < 4
let seasons = ["봄", "여름", "가을", "겨울"];
println!("{:?}", seasons[0..2]); // error, 길이에 대해 컴파일시점에 알 수 없으므로 불가
// &seasons[0..2] ref를 넘겨서 처리 [0, 2)
// &seasons[0..=2] inclusive end
}
// [6, 7]
let mut v = Vec::new();
v.push(5);
v.push(5);
v.push(5);
for i in &v {
println!("{}", i);
}
// v.len()
// v.capacity()
println("{:?}", v.pop()); // Some(10) Option값 이 출력됨
let r = vec![
Example::Int(142),
Example::Float(12.32),
Example::Text(String::from("string")),
];
println!("{:?}", &r);
VecDeque::from(vec![0; 600_00]);
// pop_front();
// pop_back();